profil(buff, bufsiz, offset, scale) add_profil(buff, bufsiz, offset, scale) char *buff; int bufsiz, offset, scale;
The scale is interpreted as an unsigned, fixed-point fraction with 16 bits of fraction: 0x10000 gives a 1-1 mapping of pc's to words in buff; 0x8000 maps each pair of instruction words together.
Profiling is turned off by giving a scale of 0 or 1. It is rendered ineffective by giving a bufsiz of 0. Profiling is turned off when an execve is executed, but remains on in child and parent both after a fork. Profiling is turned off if an update in buff would cause a memory fault.
The alternate interface add_profil allows multiple areas of discontiguous memory to be profiled. A single call to profil can be followed by multiple calls to add_profil. The call to profil has the effect of removing the profiling of all areas specified by previous add_profil calls. Being able to specify multiple profiling areas is useful in a system which scatters code across large ranges of virtual address space (for example shared libraries).